package com.lzq.course.server.service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.lzq.course.server.domain.File;
import com.lzq.course.server.domain.FileExample;
import com.lzq.course.server.dto.FileDto;
import com.lzq.course.server.dto.PageDto;
import com.lzq.course.server.mapper.FileMapper;
import com.lzq.course.server.util.CopyUtil;
import com.lzq.course.server.util.UuidUtil;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Date;

@Service
public class FileService {

    @Resource
    private FileMapper fileMapper;

    /**
     * example 这个文件很有用
     * 可以帮我们生成where order 查询
     * 不用单独写sql的增删改查
     */
    public void list(PageDto<FileDto> pageDto) {
        // 分页查询 页码不是从0开始
        PageHelper.startPage(pageDto.getPage(), pageDto.getSize());

        // 排序
        FileExample fileExample = new FileExample();

        // 查询
        List<File> fileList = fileMapper.selectByExample(fileExample);

        PageInfo<File> pageInfo = new PageInfo<>(fileList);
        pageDto.setTotal(pageInfo.getTotal());

        List<FileDto> fileDtoList = CopyUtil.copyList(fileList, FileDto.class);

        pageDto.setList(fileDtoList);
    }

    /**
     * 保存 修改
     * @param fileDto
     */
    public void save(FileDto fileDto) {
        //BeanUtils.copyProperties(fileDto, file);
        File copyFile = CopyUtil.copy(fileDto, File.class);
        File fileDb = selectByKey(fileDto.getKey());

        if (fileDb == null) {
            // 新增
            // 八位的 id
            copyFile.setId(UuidUtil.getShortUuid());

            Date now = new Date();

            fileMapper.insert(copyFile);
        } else {
            // 更新 分片传输索引
            fileDb.setShardIndex(fileDto.getShardIndex());
            fileMapper.updateByPrimaryKey(fileDb);
        }
    }

    /**
     * 查询分片传输记录
     * @param key
     * @return
     */
    private File selectByKey(String key) {
        FileExample fileExample = new FileExample();
        fileExample.createCriteria().andKeyEqualTo(key);
        List<File> fileList = fileMapper.selectByExample(fileExample);
        return fileList.isEmpty() ? null : fileList.get(0);
    }

    /**
     * 删除
     * @param id
     */
    public void delete(String id) {
        fileMapper.deleteByPrimaryKey(id);
    }

    /**
     * 检查分片状态
     */
    public FileDto findByKey(String key) {
        File file = selectByKey(key);
        return CopyUtil.copy(file, FileDto.class);
    }
}
